【Leetcode33】Search in Rotated Sorted Array 搜索旋转排序数组

[Leetcode33] Search in Rotated Sorted Array 搜索旋转排序数组


“The Linux philosophy is “Laugh in the face of danger”.Oops.Wrong One. “Do it yourself”. Yes, that”s it.”
Linux的哲学就是“在危险面前放声大笑”,呵呵,不是这句,应该是“一切靠自己,自力更生”才对。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* 假设按照升序排序的数组在预先未知的某个点上进行了旋转。
* ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
* 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。
* 你可以假设数组中不存在重复的元素。
* 你的算法时间复杂度必须是 O(log n) 级别。
* 示例 1:
* 输入: nums = [4,5,6,7,0,1,2], target = 0
* 输出: 4
* 示例 2:
* 输入: nums = [4,5,6,7,0,1,2], target = 3
* 输出: -1
*/
public class leetcode33 {
//二分
public int search (int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = (left+right)/2;
if(nums[mid] == target)
return mid;
//转折点在右边
else if(nums[mid] > nums[right]){
if(target <nums[mid] && target >=nums[left])
right = mid-1;
else
left = mid+1;
}else{
//在左边
if(nums[mid]<target && target <= nums[right])
left = mid + 1;
else
right = mid - 1;
}
}
return -1;
}
}
Thanks!